package com.atguigu.gmall.payment.controller;

import com.atguigu.gmall.common.execption.GmallException;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.payment.service.WxPayService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/***
 * 微信支付的controller层
 */
@RestController
@RequestMapping("/wx/pay")
public class WxPayController {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Autowired
    private WxPayService wxPayService;

    /**
     * 支付后给微信回调
     *
     * @param request
     * @return
     */
    @RequestMapping("/notify/callback")
    public String notifyCallback(HttpServletRequest request) {
        //1 调用业务层方法，获取数据
        String returnXmlString = wxPayService.notifyCallback(request);

        //2 响应数据
        return returnXmlString;
    }

    /**
     * 查询订单的支付结果
     *
     * @param orderId
     * @return
     */
    @GetMapping("/getWxPayResult")
    public Result getWxPayResult(@RequestParam String orderId) {
        //1 校验参数
        if (StringUtils.isEmpty(orderId)) {
            throw new GmallException("参数非法", null);
        }

        //2 调用业务层方法
        Map<String, String> wxPayResult = wxPayService.getWxPayResult(orderId);

        //3 响应数据
        return Result.ok(wxPayResult);
    }

    /**
     * 获取支付地址（二维码），加秒杀微服务之后
     *
     * @param payUrlParamMap
     * @return
     */
    @GetMapping
    public String getPayUrl(@RequestParam Map<String,String> payUrlParamMap) {
        //1 校验参数
        if (StringUtils.isEmpty(payUrlParamMap.get("body")) ||
                StringUtils.isEmpty(payUrlParamMap.get("orderId")) ||
                StringUtils.isEmpty(payUrlParamMap.get("amount"))) {
            throw new GmallException("参数非法！", null);
        }

        //2 调用业务层方法
        String payUrl = wxPayService.getPayUrl(payUrlParamMap);

        //3 响应数据
        return payUrl;
    }

//    /**
//     * 获取支付地址（二维码）未加秒杀微服务之前
//     *
//     * @param body
//     * @param orderId
//     * @param amount
//     * @return
//     */
//    @GetMapping
//    public String getPayUrl(@RequestParam String body,
//                            @RequestParam String orderId,
//                            @RequestParam String amount) {
//        //1 校验参数
//        if (StringUtils.isEmpty(body) || StringUtils.isEmpty(orderId) || StringUtils.isEmpty(amount)) {
//            throw new GmallException("参数非法！", null);
//        }
//
//        //2 调用业务层方法
//        String payUrl = wxPayService.getPayUrl(body, orderId, amount);
//
//        //3 响应数据
//        return payUrl;
//    }
}
